package cn.xiehangs;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Touchable;
import com.badlogic.gdx.utils.Null;

import java.util.Objects;
import java.util.Random;

public class tou_zi extends Actor {
    final int tou_zi_dian_shu=6;
    final int tou_zi_dong_hua_shu=30;
    private final float x,y;//骰子的坐标
    private final float width,height;//骰子的宽高
    Boolean is_dong_hua=false;//是否在播放动画

    private static int dian_shu_shu=-1;//骰子的点数
    private int dong_hua_dian_shu=-1;//骰子的点数

    private int dong_hua_shu=0;//骰子的动画0-29

    String name,type;//骰子的名字和类型
    Texture []dian_shu=new Texture[tou_zi_dian_shu];
    Texture []dong_hua=new Texture[tou_zi_dong_hua_shu];

    private Texture texture;//纹理

    Random rd=new Random();

    public tou_zi(float x,float y,float width,float height,String name,String type){
        this.x = x;//初始化骰子的坐标
        this.y = y;//初始化骰子的坐标
        this.name = name;//初始化骰子的名字
        this.type = type;//初始化骰子的类型
        this.width=width;//初始化骰子的宽
        this.height=height;//初始化骰子的高

        for(int i=0;i<tou_zi_dian_shu;i++){
            dian_shu[i]=new Texture(Gdx.files.internal("骰子图/"+(i+1)+".png"));
        }
        for(int i=0;i<tou_zi_dong_hua_shu;i++){
            dong_hua[i]=new Texture(Gdx.files.internal("骰子图/s"+(i+1)+".png"));
        }
        setSize(dian_shu[0].getWidth(),dian_shu[0].getHeight());
        texture=dian_shu[5];
        setTouchable(Touchable.enabled);
    }


    public void act_dong_hua(int dian_shu_shu){
        is_dong_hua=true;//播放动画
        tou_zi.dian_shu_shu =dian_shu_shu;
        this.dong_hua_dian_shu=dian_shu_shu-1;
        this.dong_hua_shu=0;//初始化动画帧数
    }
    @Override
    public @Null Actor hit(float x, float y, boolean touchable){//判断是否在点击区域
        float x1=x-this.x;
        float y1=y-this.y;
        if(x1>0&&y1>0&&x1<width&&y1<height)
            return this;
        return null;
    }

    public void act(float delta) {//每一帧都会调用
        super.act(delta);
        if (is_dong_hua){
            texture=dong_hua[dong_hua_shu];
            dong_hua_shu++;
            //骰子的动画帧数表示一共有30帧
            int jie_shu_dong_hua = 30;
            if (Objects.equals(dong_hua_shu, jie_shu_dong_hua)){
                is_dong_hua=false;
                dong_hua_shu=0;
                texture=dian_shu[dong_hua_dian_shu];
            }
        }
        if (Gdx.input.justTouched()) {
            // 获取触摸点坐标
            float touchX = Gdx.input.getX();

            float touchY=Gdx.input.getY();
            touchY = Gdx.graphics.getHeight() - 1 - touchY;


            // 判断触摸点是否在Actor范围内
            if (hit(touchX,touchY, true) != null&& Objects.equals(dian_shu_shu, -1)) {
                // 触发点击事件
                onClick();
            }
        }
    }
    void onClick(){
        if(is_dong_hua.equals(false))
            act_dong_hua(this.rd.nextInt(6)+1);
    }

    public static int get_dian_shu (){
        int number1=dian_shu_shu;
        dian_shu_shu=-1;
        return number1;
    }

    public void draw(Batch batch, float parentAlpha) {


        // 如果 region 为 null 或者 演员不可见, 则直接不绘制
        if (texture.equals(null) || !isVisible()) {
            return;
        }

		/* 这里选择一个较为复杂的绘制方法进行绘制
		batch.draw(
				region,
				x, y,
				originX, originY,
				width, height,
				scaleX, scaleY,
				rotation
		);*/

        /*
         * 绘制纹理区域
         * 将演员中的 位置(position, 即 X, Y 坐标), 缩放和旋转支点(origin), 宽高尺寸, 缩放比, 旋转角度 应用到绘制中,
         * 最终 batch 会将综合结果绘制到屏幕上
         */
        batch.draw(
                texture,
                x, y,width,height
        );
    }
    public void chu_shi_hua(){
        is_dong_hua=false;
        dong_hua_shu=0;
        this.texture=dian_shu[5];
    }
}
